<?php

/**
 * Sistema de segurança com acesso restrito
 *
 * Usado para restringir o acesso de certas páginas do seu site
 *
 * @author Thiago Belem <contato@thiagobelem.net>
 * @link http://thiagobelem.net/
 *
 * @version 1.0
 * @package SistemaSeguranca
 */
 
//  Configurações do Script
$_SG['conectaServidor'] = true;   
$_SG['abreSessao']      = true;        
$_SG['caseSensitive']   = false;
$_SG['validaSempre']    = true;

// Configuração de conexão
$_SG['servidor'] = 'localhost';   
$_SG['usuario']  = 'root';
$_SG['senha']    = '';
$_SG['banco']    = 'jsv_agro';

$_SG['paginaLogin'] = 'index.php'; // Página de login
$_SG['tabela'] = 'usuario';       

// Verifica se precisa fazer a conexão com o MySQL
if ($_SG['conectaServidor'] == true) {
    $_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'], $_SG['senha'])
    or die("MySQL: Não foi possível conectar-se ao servidor [" . $_SG['servidor'] . "].");
    
    mysql_select_db($_SG['banco'], $_SG['link'])
    or die("MySQL: Não foi possível conectar-se ao banco de dados [" . $_SG['banco'] . "].");
}

// Verifica se precisa iniciar a sessão
if ($_SG['abreSessao'] == true) {
    session_start();
}

/**
 * Função que valida um usuário e senha
 *
 * @param string $usuario - O usuário a ser validado
 * @param string $senha - A senha a ser validada
 *
 * @return bool - Se o usuário foi validado ou não (true/false)
 */
function validaUsuario($usuario, $senha) {
    global $_SG;


    // Usa a função addslashes para escapar as aspas
    $nusuario = addslashes($usuario);
    $nsenha   = md5($senha);

    // Monta uma consulta SQL (query) para procurar um usuário
    $sql = "SELECT 
               IDUsuario,
               nome
            FROM
               usuario
            WHERE  usuario = '".$nusuario."'
            AND    senha   = '" . $nsenha . "'";
    $query = mysql_query($sql);
    $resultado = mysql_fetch_assoc($query);

    // Verifica se encontrou algum registro
    if (empty($resultado)) {
        // Nenhum registro foi encontrado => o usuário é inválido
        return false;
    } else {
        $_SESSION['usuarioID']   = $resultado['IDUsuario'];
        $_SESSION['usuarioNome'] = $resultado['nome'];
        
        if ($_SG['validaSempre'] == true)
        {
          $_SESSION['usuarioLogin'] = $usuario;
          $_SESSION['usuarioSenha'] = $senha;
        }
        return true;
    }
}

/**
 * protegePagina()
 * 
 * Função que verifica a autenticação na sessão
 * 
 * @author Thiago Belem
 * @global $_SG
 */
function protegePagina() {
    global $_SG;

    if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
        // Não há usuário logado, manda pra página de login
        expulsaVisitante();
    } else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
        // Há usuário logado, verifica se precisa validar o login novamente
        if ($_SG['validaSempre'] == true) {
            // Verifica se os dados salvos na sessão batem com os dados do banco de dados
            if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {
                // Os dados não batem, manda pra tela de login
                expulsaVisitante();
            }
        }
    }
}

/**
 * expulsaVisitante()
 * 
 * Função responsável por desautenticar usuários que não estão logados
 */ 
function expulsaVisitante() {
    global $_SG;

    // Remove as variáveis da sessão (caso elas existam)
    unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);
    header("Location: " . $_SG['paginaLogin']);
}